package org.jsola.hr.service;

import org.jsola.core.Page;
import org.jsola.core.service.IService;
import org.jsola.hr.dao.IMemoInfoDAO;
import org.jsola.hr.dto.MemoInfoAddDTO;
import org.jsola.hr.dto.MemoInfoUpdateDTO;
import org.jsola.hr.entity.MemoInfoDO;
import org.jsola.hr.query.MemoInfoQuery;
import org.jsola.hr.vo.HomePageMemoRemindRelationVO;
import org.jsola.hr.vo.MemoInfoListVO;
import org.jsola.hr.vo.MemoInfoVO;
import org.jsola.hr.vo.MemoListVO;
import org.jsola.user.core.TokenUser;

import java.util.List;


/**
 * 备忘录
 *
 * @author zhr
 */
public interface IMemoInfoService extends IService<IMemoInfoDAO, MemoInfoDO> {

    /**
     * 新增备忘录
     * @param memoInfoAddDTO 新增备忘录DTO
     * @param tokenUser 当前用户
     * @return 备忘录详情信息
     */
    MemoInfoVO save(MemoInfoAddDTO memoInfoAddDTO, TokenUser tokenUser);

    /**
     * 批量新增备忘录
     * @param memoInfoAddDTOList 新增备忘录DTO
     * @param tokenUser 当前用户
     * @return 备忘录详情信息
     */
    List<MemoInfoVO> batchSave(List<MemoInfoAddDTO> memoInfoAddDTOList, TokenUser tokenUser);

    /**
     * 修改备忘录
     * @param memoInfoUpdateDTO 修改备忘录DTO
     * @param tokenUser 当前用户
     * @return 更新数量
     */
    int update(MemoInfoUpdateDTO memoInfoUpdateDTO, TokenUser tokenUser);


    /**
     * 批量删除备忘录，物理删除，更新is_valid字段，从回收站删除
     * @param tokenUser 当前用户
     * @param memoInfoIds 备忘录id
     * @return 删除数量
     */
    int deleteByIds(TokenUser tokenUser, String...memoInfoIds);

    /**
     * 根据备忘录id查找
     * @param memoInfoId 备忘录id
     * @param siteId 所属站点id
     * @return 备忘录详情信息
     */
    MemoInfoVO selectById(String memoInfoId, String siteId);

    /**
     * 查询备忘录
     * @param memoInfoQuery 查询条件
     * @param siteId 所属站点id
     * @return 备忘录列表信息
     */
    List<MemoInfoListVO> select(MemoInfoQuery memoInfoQuery, String siteId);

    /**
    * 查询备忘录记录数
    * @param memoInfoQuery 查询条件
    * @param siteId 所属站点id
    * @return 备忘录记录数
    */
    int selectCount(MemoInfoQuery memoInfoQuery, String siteId);

    /**
     * 分页查询备忘录
     * @param memoInfoQuery 查询条件
     * @param siteId 所属站点id
     * @return 备忘录列表信息
     */
    Page<MemoInfoListVO> selectPage(MemoInfoQuery memoInfoQuery, String siteId);


    /**
     * 根据备忘录id查找
     * @param memoInfoId 备忘录id
     * @param siteId 所属站点id
     * @return 备忘录
     */
    MemoInfoDO selectDOById(String memoInfoId, String siteId);

    /**
     * 查询备忘录
     * @param memoInfoQuery 查询条件
     * @param siteId 所属站点id
     * @return 备忘录列表
     */
    List<MemoInfoDO> selectDO(MemoInfoQuery memoInfoQuery, String siteId);

    /**
     * 备忘录提醒发送消息通知
     * @param subjectId 业务ID
     * @param tokenUser 当前用户
     * @return 消息通知
     */
    Integer memoRemindNotice(String subjectId, TokenUser tokenUser);

    /**
     * 获取首页备忘录提醒相关信息
     * @param tokenUser 登录用户
     * @param memoInfoQuery 备忘录查询参数
     * @return 首页备忘录
     */
    HomePageMemoRemindRelationVO getHomePageMemoRemindRelation(MemoInfoQuery memoInfoQuery, TokenUser tokenUser);

    /**
     * 获取今日备忘更多列表
     * @param tokenUser 登录用户
     * @param memoInfoQuery 备忘录查询参数
     * @return 今日更多备忘录
     */
    HomePageMemoRemindRelationVO getMemoRemindListToday(MemoInfoQuery memoInfoQuery, TokenUser tokenUser);

    /**
     * 获取当前用户消息通知列表
     * @param siteId 业务ID
     * @param memoInfoQuery 备忘录查询参数
     * @return 当前用户消息通知列表
     */
    HomePageMemoRemindRelationVO getCurrentUserNoticeList(MemoInfoQuery memoInfoQuery, String siteId);

    /**
     * 获取指定年月员工备忘录待办事项
     *
     * @param yearly    年份
     * @param monthly   月份
     * @param companyId 公司id
     * @param tokenUser 当前用户
     * @return 日期-备忘录待办事项
     */
    List<MemoListVO> getCompleteMemoListByYearlyAndMonthly(Integer yearly, Integer monthly, String companyId, TokenUser tokenUser);

    /**
     * 删除今天以后的备忘录
     * @param configId
     * @return
     */
    Integer delByConfigIdAndDate(String configId);
}


